const express = require('express')
const md5 = require('blueimp-md5')

const User = require('../models/user')
const Topic = require('../models/topic')

const router = express.Router();

// 首页
router.get('/', (req, res, next) => {

  new Promise((resolved, rejected) => {
      Topic.find((err, data) => { // 拿到数据库文章数组对象
        if (err) { // 数据库错误
          return rejected(err)
        }
        return resolved(data);

      })
    })
    .then(data => {
      // console.log(data.length);
      
      // 渲染主页
      res.render('index.html', {
        user: req.session.user, // 拿session
        topics: data
      })

    })
    .catch(err => { // 给错误中间件
      next(err)
    })




})

// 登陆页
router.get('/login', (req, res, next) => {
  res.render('login.html');
})

router.post('/login', (req, res, next) => {
  const body = req.body; // 获取请求参数

  User.findOne({
    email: req.body.email,
    password: md5(md5(req.body.password))

  }).then(data => {
    if (!data) {
      return res.status(200).json({
        err_code: 1,
        message: '邮箱或密码错误'
      })
    }

    req.session.user = data;
    return res.status(200).json({
      err_code: 0,
      message: 'OK'
    })

  }, err => {
    if (err) {
      return next(err)
    }
  })

})



// 注册页
router.get('/register', (req, res, next) => {
  res.render('register.html')
})

router.post('/register', (req, res, next) => {

  const body = req.body; // post 请求参数
  User.findOne({ // 查询   如果有一个不满足条件 → 注册不成功
      $or: [{
          email: body.email
        },
        {
          nickname: body.nickname
        }
      ]
    }).then(data => { // 成功连接判断
      if (data) { // 如果存在用户名或者邮箱 → 成功, 发送不成功JSON数据
        return res.status(200).json({
          err_code: 1,
          message: 'Email or nickname already exist.'
        })
      }

      // 注册用户 保存数据库
      body.password = md5(md5(body.password)); // 密码加密
      return new User(body).save();


    }, err => { // 连接不到数据库
      if (err) { // 数据库错误 →  发送JSON数据
        return next(err)
      }
    })
    .then(data => {
      req.session.user = data;

      res.status(200).json({
        err_code: 0,
        message: 'OK'
      })


    })

})

// 退出
router.get('/logout', (req, res, next) => {
  // 清除session
  req.session.user = null;
  // 跳转到登陆页
  res.redirect('/login');
})

// 个人主页
router.get('/settings/profile', (req, res, next) => {

  res.render('settings/profile.html', {
    user: req.session.user
  })
})

router.post('/update', (req, res, next) => { // 更新个人设置
  const body = req.body;
  body._id = req.session.user._id;

  User.update(req.session.user, body).then(data => { // 更新数据库
      console.log('修改成功', data);
      console.log(req.session.user);


      return User.findOne({ // 下一个then执行查到相关user操作
        _id: req.session.user._id
      })

    }, err => {
      return next(err); // 跳到错误页面

    })
    .then(data => { // 拿到修改后的user 设置对应的session, 从而改变设置内容

      req.session.user = data;
      return res.status(200).json({
        err_code: 0,
        message: 'Update is already'
      })

    })

})

// 账户设置
router.get('/settings/admin', (req, res, next) => {
  res.render('settings/admin.html', {
    user: req.session.user
  })
})

router.post('/updatePSW', (req, res, next) => {
  // 保存： 校验当前密码是否正确, 数据库检索 查找 不正确返回错误信息
  //        保存密码 数据库检索 跟新 更新密码  去除session  跳转到登录页重新登录



  User.findOne({
      _id: req.body._id,
      password: md5(md5(req.body.old))

    })
    .then(data => { // 密码正确

      User.updateOne({
          _id: data._id,
          password: data.password
        }, {
          _id: data._id,
          password: md5(md5(req.body.password))
        })
        // 更新成功
        .then(data => {
          req.session.user = null; // 清除session, 重新登录
          return res.status(200).json({
            err_code: 0,
            message: 'save is already'
          })
        })
        // 数据库问题
        .catch(err => {
          return next(err)
        })


    })
    .catch(err => { // 密码错误
      res.status(200).json({
        err_code: 1,
        message: 'password is err.'
      })

    })




})

// 删除操作
router.get('/delete', (req, res, next) => {

  const session = req.session.user
  // 查询id
  User.findOne({
      _id: session._id

    })
    // 成功
    .then(data => {
      console.log('找到', data);
      User.deleteOne({
          _id: data._id
        })
        // 删除成功
        .then(data => {
          console.log(data);
          res.redirect('/login');

        })
        // 数据库问题
        .catch(err => {
          next(err)
        })

    })
    // 服务器错误
    .catch(err => {
      next(err);
    })



})

module.exports = router;